home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1993…ch: Other People's Memory / ADC Developer CD (1993-03) (''Other People's Memory'')_iso / Dev.CD Mar 93.iso / Development Platforms / Apple II / Essentials / GSBug / GSBug.specs < prev    next >
Encoding:
Text File  |  1992-02-28  |  24.8 KB  |  737 lines  |  [TEXT/pdos]

  1.  
  2. ---------
  3. GSBug 1.6
  4.  
  5. 28-Feb-92
  6. ---------
  7.  
  8. Version 1.6 (DAL)
  9.  
  10. Changed version to 1.6 final.  DebugVersion returns $16FF.
  11.  
  12. When booting under 6.0, the GSBug now draws an "X" over the bug icon on
  13. the boot screen if it can't load, either because the Option key is down
  14. or because it determine that another copy of GSBug is already installed
  15. (by examining the code jumped to by the CDA-menu vector at $E10048).
  16.  
  17. CSAVE defaults to *:System:System.Setup:GSBug.Setup if no path is given.
  18. This is the same pathname GSBug loads automatically when it loads.
  19.  
  20. Added shortcut command names for commands that are too long.  (The old
  21. versions still work, if your fingers need the exercise.)
  22.     sb, sh, show     ShowBrks
  23.     t-               TBrkOut
  24.     t+               TBrkIn
  25.     o-               OSBrkOut
  26.     o+               OSBrkIn
  27.     b-               out
  28.     b+               in
  29.     stb              SetTBrk
  30.     ctb              ClrTBrk, ClrAllTBrk
  31.     sob              SetOSBrk
  32.     cob              ClrOSBrk, ClrAllOSBrk
  33.     pfx              Prefix
  34.  
  35. ClrTBrk and ClrOSBrk (CTB and COB) clear all breaks if no parameter
  36. present.
  37.  
  38. OS break handling preserves the A register.
  39.  
  40. SetOSBrk #0 breaks on all OS calls.
  41.  
  42. Setting a tool break (with SetTBrk or STB) turns on tool breaks
  43. automatically; clearing all tool breaks (with ClrAllTBrk, or CTB
  44. with no name) automatically turns off tool breaks.
  45.  
  46. Setting an OS break (with SetOSBrk or SOB) turns on OS breaks
  47. automatically; clearing all OS breaks (with ClrAllOSBrk, or COB
  48. with no name) automatically turns off OS breaks.
  49.  
  50. The status line used to show "i" for breakpoints-in or "o" for
  51. breakpoints out, without showing whether tool breaks or OS breaks
  52. were in.  The improved status line looks liks this:
  53.     Key BRKs  DebugD ...
  54.     00  btod   9400  ...
  55.  
  56.     The b is present when breakpoints are in ("b+" or "in").
  57.     The t is present when tool breaks are in ("t+" or "TBrkIn")
  58.     The o is present when OS breaks are in ("o+" or "OSBrkIn")
  59.     The last character is a d for Debugger breaks ("dbrk"),
  60.         m for Monitor breaks ("mbrk")
  61.  
  62. IN and OUT (and B+ and B-) no longer beep if breakpoints are already
  63. in/out.
  64.  
  65. Using down-arrow while stepping now correctly skips inline GS/OS calls
  66. (JSL $E100A8).
  67.  
  68. Stepping or tracing through an imbedded symbolic name with the screen
  69. OFF now works properly (it was adding the BRL offset to the program
  70. counter twice).
  71.  
  72. If Quiet mode is on (Q), CapsLock no longer clicks when GSBug intercepts
  73. a call to SystemEvent (preventing any DA from getting the keystroke).
  74.  
  75. Stack dump displays "??" for bytes in the $C0xx range, to avoid
  76. accidentally messing with softswitches when the stack pointer is high
  77. in the $BFxx range (as it is during a GS/OS call).
  78.  
  79. --------------------
  80. Version 1.6b21 (DAL)
  81.  
  82. Fixed OSBreaks to work correctly if you set more than one (broken in
  83. b17-20).
  84.  
  85. By the way, here is the format for imbedded procedure names (added in
  86. b18):
  87.           BRL Skip
  88.           $71 $77
  89.           Name (with leading length byte)
  90.        Skip ...
  91.  
  92. (See Apple IIgs Technical Note #103 for details.)
  93.  
  94. Typically you will want to use a macro to conditionally put names in
  95. the object.
  96.  
  97.  
  98. Version 1.6b20 (DAL)
  99.  
  100. Added new GS/OS call name SetStdRefNum, call number $203A.
  101.  
  102. Fixed the version string so it doesn't say "Apple Confidential."
  103.  
  104.  
  105. Version 1.6b19 (DAL)
  106.  
  107. To automatically load a templates file at boot time, it must be named
  108. GSBug.AutoTemp  (in the System.Setup folder).
  109.  
  110. If you use LoadTemp without a pathname, it still defaults to
  111. GSBug.Templates.
  112.  
  113.  
  114. Version  1.6b18 (DAL)
  115.  
  116. Versions with 6.0 stuff included are now 1.6bxx; without 6.0 stuff is
  117. still 1.5bxx.
  118.  
  119. LoadTemp command no longer returns a bogus error after successfully
  120. loading a templates file.  Also, if you type LoadTemp with no pathname,
  121. it uses */System/System.Setup/GSBug.Templates.
  122.  
  123. Turned off high bits on the GSBug.Setup file pathname, so you don't get
  124. a strange error while booting from an AppleShare server.
  125.  
  126. KNOWN BUG:  Don't put a breakpoint on an imbedded name.  If you do, the
  127. name can get overwritten when the breakpoint is removed.
  128.  
  129.  
  130. Version 1.5b17 (DAL)
  131.  
  132. Now supports inline imbedded procedure names (as generated by the name
  133. and procname macros in M16.Debug, for example).  These show up in
  134. disassembly and as the operands of JSRs and JSLs.
  135.  
  136. OSBreaks trigger regardless of call class now.  For example, you can
  137. SetOSBrk for either Open or OpenGS, and either one will cause a break.
  138.  
  139. Changed named-resource call names to begin with RM (RMLoadNamedResource,
  140. etc).
  141.  
  142. When GSBug notices a toolbox call being made in other than full 16-bit
  143. mode, it  displays a a warning dialog (using TLTextMountVolume).  Hitting
  144. ESC at that dialog cancels future warnings until you reload GSBug.
  145.  
  146. When GSBug notices a toolbox call being made with Decimal mode on, it
  147. stops cold at  a BRK $F8, rather than letting things get completely
  148. baked before crashing.
  149.  
  150. Fixed one old reference to $010100 to store $C0 instead of $80.
  151. Interrupts should reliably use $100..1C0 for stack space now.
  152.  
  153. Added 5 blanks to end of 'TRACE ' message so it completely overwrites
  154. the 'SINGLE STEP' message.
  155.  
  156.  
  157. Version 1.5b16 (DAL)
  158.  
  159. No such thang.
  160.  
  161.  
  162. Version 1.5b15 (DAL)
  163.  
  164. Option-space now works reliably to bypass a memory-protect range,
  165. including a tool call.  (This is an old feature, but keyboard translation
  166. normally prevented it from working!)
  167.  
  168. In trace mode, Space and ESC now kill "awainting RTx" mode.
  169.  
  170. Fixed "n" command so it won't crash if nobody has called DebugSetHook.
  171.  
  172. Having tool breaks on calls which get made indirectly by GSBug no longer
  173. cause a crash.  You can break on NewHandle now, for example.
  174.  
  175. In Breakpoint subscreen, Space maps trigger count from 0 to 1 and from
  176. nonzero to zero.  Tab moves between the address and count fields (easier
  177. than hitting arrows).
  178.  
  179. In the memory-protect subscreen, Tab moves between columns.
  180.  
  181. Added $01/FC00.FFFF (OS system service calls) to the memory protect list.
  182.  
  183. Changed the default trace-window setting to center-screen.
  184.  
  185. Changed the EmulStack value from $80 to $C0 (trying to get rid of some
  186. unpredictable crashes, probably caused by AppleTalk running out of stack
  187. space).  This means you can safely trace a program while the stack is in
  188. the $01C1..01FF range, and that interrupts use $0100..01C0.
  189.  
  190. GSBug now takes a whole bank, minimizing its effect on where things are
  191. located in memory relative to each other, and ensuring that tool breaks
  192. work reliably (tool calls never break if they come from the same bank
  193. the debugger is in).
  194.  
  195. Note that templates do work; you can ignore the garbage error you still
  196. get from loadtemp.
  197.  
  198.  
  199. Version 1.5b14 (DAL)
  200.  
  201. Versions 1.5b12 and b13 were never officially released.  1.5b14 is fine,
  202. except that I make no guarantees about the Template commands.  I think
  203. they work, but you'll get a funky error message from loadtemp.
  204.  
  205. When you let a JSL execute in real time (including a tool call), the
  206. debugger temporarily changes the owner ID of its own handle to match
  207. the owner of the handle containing the code you're debugging.  This
  208. way MMStartUp returns the appropriate memory ID, instead of always
  209. returning the debugger's ID.
  210.  
  211. DebugSetHook(nil) now removes the hook.
  212.  
  213. The 1K bank 0 segment GSBug allocates now has the same ID as the
  214. debugger (was previously always $80xx).
  215.  
  216. Fixed OS breaks to work after return from ProDOS 8 (added a Notify
  217. Proc to re-trap the OS vectors).
  218.  
  219. Changed the "_" command so that if you don't type a number, it's like
  220. typing zero.  For example, if you have a template called "Template"
  221. which displays an informational message, you can type "_Template"
  222. instead of "_Template 0".
  223.  
  224. DP:xxx command dumps 16 bytes from DP to the command line.
  225.  
  226. Tool call $0CFF DebugGetInfo(word):long.  Word=0 returns the current
  227. value of the program counter (useful from a procedure called by the N
  228. command).
  229.  
  230. Note that real-time counted breakpoints don't work for JMP() ($6C),
  231. JMP(,X) ($7C), JML() ($DC), and JSR(,X) ($FC).
  232.  
  233. With Monte's help, located the misplaced CLI that was causing the X
  234. command used on a JSR to accidentally return with the Bank register
  235. set to the debugger's bank, and the Stack set to the Interrupt-time
  236. stack.
  237.  
  238.  
  239. Version 1.5b11 (DAL)
  240.  
  241. You can use SetOSBrk and ClrOSBRK with call names now.  Class-1 names
  242. all end in GS to distinguish them from their class-0 siblings.
  243. Examples:
  244.  
  245.     SetOSBrk #1
  246.     SetOSBrk _Create
  247.     SetOSBrk #2001
  248.     SetOSBrk _CreateGS
  249.  
  250.  
  251. The debugger now changes its own handleUs memory ID during a real-time
  252. JSL to match the code being stepped.  For example, now you can step over
  253. an MMStartUp and get the expected ID returned (the application's instead
  254. of the debugger's).
  255.  
  256. Changed 'D' command to 'I' so it doesn't interfere with typing a hex
  257. number that starts with a D.  The I command toggles the 'ignore REP/SEP
  258. instructions mode' when disassembling.
  259.  
  260. Changed parsing for the P (Print screen) command so that it just beeps if
  261. there are any characters after the P.  (Typing 'put' intead of 'out' can
  262. no longer hang your system.)
  263.  
  264. Put the help screen for MP mode back in.
  265.  
  266. The solid flashing cursor in MEM, MP, and BP no longer flashes.  In
  267. exchange for this, special characters (like braces) that happen to be
  268. in Inverse don't flash while you're in the subscreens.
  269.  
  270. Added pseudo tool call $0BFF=DebugSetHook (one Long parameter).  The N
  271. ("neat- o") command calls this hook.
  272.  
  273. Removed a conditional hard-coded increment of $004002 when X-ing a JSR.
  274.  
  275. Added REP #$30 on the two tool-dispatcher-intercept routines.  Making
  276. tool calls in other than full native mode is still not a good idea.
  277.  
  278. Fixed real-time breakpoints for most 1-byte instructions and all 16-bit
  279. load immediate instructions.  Previously, they crashed when used with a
  280. count greater than one.
  281.  
  282. Please note that */System/System.Setup/GSBug.Setup is *already* loaded
  283. automatically (has been for quite a while).
  284.  
  285.  
  286. Version 1.5b10 (DAL)
  287.  
  288. Stepping in emulation mode should be much more reliable now, although it
  289. isn't perfect (in particular, one place where there's a window of
  290. vulnerability is using X on a JSR in emulation mode, but if you have the
  291. I bit set in your P register there's no problem).
  292.  
  293. Having the stack in $01xx works much better now, whether you're in
  294. emulation or not.  This works by frequently stuffing a $80 into $01/0100
  295. (EMULSTACK, the location the interrupt manager and other things used to
  296. set the $01xx stack when needed).
  297.  
  298. If you trace code that actually uses the $01/0100 value to set the stack
  299. pointer, you still have a problem, since your program will start using
  300. the part of the stack that gets toasted on every interrupt.
  301.  
  302. You can now type in GSBug even if the Event Manager is on but keyboard
  303. interrupts are off.  Previously this would leave you dead in the water.
  304.  
  305. Files created with CSave now have a real filetype/auxtype assignment
  306. ($5A/0005).
  307.  
  308. Fixed DebugStr to return no error (previously it was returning the high
  309. two bytes of the caller's address as an error).
  310.  
  311. Took out code that was checking $C020 (not SLOTREG at $C02D) to see if
  312. the printer slot was switched in.  Makes no sense anyway, because a
  313. printer can legitimately be either an internal or external slot.
  314.  
  315. Brought the list of Toolbox call names up to date for System Software
  316. 5.0.3 (see changes below).
  317.  
  318. Added tool set names (for example, $0002 is Memory Manager).  For some
  319. time, you've been able to use SetTBrk with a tool set number, to force
  320. a break on every call to that tool set.  Now you can do it by name, too.
  321.  
  322. Examples:
  323.     SetTBrk #2
  324.     SetTBrk _Memory Manager
  325.     ShowBrks
  326.  
  327. Saved about 900 bytes by removing many extra copies of the string
  328. "Unknown".
  329.  
  330. Obsolete call names removed.  Call names corrected.  Call names added.
  331.  
  332. Tool Set Names  (You can use these with SetTBrk.)
  333.  
  334. 0001    Tool Locator
  335. 0002    Memory Manager
  336. 0003    Misc Tools
  337. 0004    QuickDraw
  338. 0005    Desk Manager
  339. 0006    Event Manager
  340. 0007    Scheduler
  341. 0008    Sound Tools
  342. 0009    ADB
  343. 000A    SANE
  344. 000B    Integer Math
  345. 000C    Text Tools
  346. 000E    Window Manager
  347. 000F    Menu Manager
  348. 0010    Control Manager
  349. 0011    Loader
  350. 0012    QuickDraw Aux
  351. 0013    Print Manager
  352. 0014    Line Edit
  353. 0015    Dialog Manager
  354. 0016    Scrap Manager
  355. 0017    Standard File
  356. 0019    Note Synth
  357. 001A    Note Seq
  358. 001B    Font Manager
  359. 001C    List Manager
  360. 001D    ACE
  361. 001E    Resource Manager
  362. 0020    Midi
  363. 0021    Video Overlay
  364. 0022    Text Edit
  365. 0023    MIDI Synth
  366. 00FF    Debugger
  367.  
  368.  
  369. GS/OS Call Names
  370.  
  371. Brought the list of GS/OS call names up to date for System Software
  372. 5.0.3.
  373.  
  374. Removed this call:
  375. $000E   ExpandPath (becuase there's no class-0 version)
  376.  
  377. Added these class-1 call names:
  378.  
  379. $2029   Quit
  380. $2033   FSTSpecific
  381. $2034   AddNotifyProc
  382. $2035   DelNotifyProc
  383. $2036   DRename
  384. $2037   GetStdRefNum
  385. $2038   GetRefNum
  386. $2039   GetRefInfo
  387.  
  388.  
  389. What It Doesn't Do Yet
  390.  
  391. Note--sometimes the debugger gets mysteriously disconnected from the
  392. Apple-Ctl-ESC vector.  If you can reproduce this, let me know.
  393.  
  394. Some of the help screens are incompelete or inaccurate.
  395.  
  396. Templates currently limited to 64K.  If template file >64K, it gets left
  397. open by accident.
  398.  
  399. Breakpoints don't work quite right in bank-switched memory, either
  400. (it doesn't store the original instruction into the right bank?).
  401.  
  402. Should show OS call names on a JSL $E100B0 (examine stack if stepping,
  403. and look for a PEA $xxxx in a disassembly).
  404.  
  405. The debugger chains into the tool-dispatcher vectors its own way.  It
  406. should use the standard method defined in GS Technical Note #87.
  407.  
  408. Will implement pseudo Tool calls to set and clear debugger breakpoints
  409. under program control.
  410.  
  411. May make the MEM locations labelable (and save labels in the config
  412. file).
  413.  
  414. "Handle" template partially implemented?
  415.  
  416. Unload should call UserShutDown on self (under ProDOS 8, just beep
  417. instead).
  418.  
  419. Make sure that "\" for changing display modes is documented.
  420.  
  421.  
  422. Documentation
  423.  
  424. The GSBug manual from APDA of 3/16/89 seems to be the latest there is.
  425. All features not covered there should be in these release notes.
  426.  
  427.  
  428. History
  429.  
  430.  
  431. This part of the document details all changes made to the debugger from
  432. version 1.3b1 to 1.5b8.
  433.  
  434.  
  435. Bug Fixes:
  436.  
  437. Real Time Tool Breaks - The mechanism for using tool breaks real time has
  438. been modified, the old method never worked quite right, what used to happen
  439. was that when a tool break was to occur, the stub in the dispatch vector
  440. would simply jump into the debugger, this would cause the stack and processor
  441. not to be set as if they came from an interupt, and the next exit of the
  442. debugger would cause code execution to start at an inapropriate case, also
  443. the actual tracing of a tool break would also cause the debugger to
  444. improperly save the current registers, so that the stack/direct page and
  445. processor status might come back damaged from a tool break. The stub has
  446. been modified to now enter the debugger with a break instruction instead
  447. of jumping to the front. This seems to solve all real time tool break
  448. problems.
  449.  
  450.  
  451. Error tool breaks - These also did not work well, and did not seem to be
  452. used by anyone anyway, so they have been removed to make room for OSBreaks.
  453.  
  454.  
  455. Version 1.5b3:
  456.  
  457. % display code was fixed so that the '*' would properly be displayed in
  458.   front of any toolbox glue that is detected.
  459.  
  460. % Fixed template data display so that if the data being displayed crosses
  461.   a bank boundry, the data is properly followed into the new bank.
  462.  
  463. % Modified the IN command so that it respects trigger counts of 0 and does
  464.   not insert real time breaks.
  465.  
  466.  
  467. Version 1.5b5:
  468.  
  469. % Added Glue tool break support. Now toolbreaks work for regular and glue
  470.   tool breaks. ErrorBreaks do not work for glue as they do not make a lot
  471.   of sense.
  472.  
  473. % Made debugger work even when a DA window is open. See new features below.
  474.  
  475. % Added keyClick so that you hear whenever the system draws a key from the
  476.   event queue. Also, cleaned up some comments.
  477.  
  478.  
  479. Version 1.5b6:
  480.  
  481. % Added new DebugStr toolcall that can be used to get more from the debugger.
  482.  
  483.  
  484. Version 1.5b7:
  485.  
  486. % Added support for real time conditional breaks.
  487.  
  488. % Added OSBreaks.
  489.  
  490. % Fixed the Debugger tool calls (like DebugStr ) so that they use the proper
  491.   tool numbers (they had the toolset number in the high byte instead of the
  492.   low byte) Documentation for them should also be right.
  493.  
  494.  
  495. Version 1.5b8:
  496.  
  497. % Added a debugger version and status call to the debugger tools.
  498.  
  499. % Enhanced the OSBreak facility.
  500.  
  501. % Removed the keyclicks because Dave complained.
  502.  
  503.  
  504. Version 1.5b9:
  505.  
  506. % Fixed some bugs.
  507.  
  508.  
  509. New Features:
  510.  
  511. DebugStr:
  512.  
  513. This feature is designed to allow developers to better know where in their
  514. program the debugger was entered. The way this feature works is that if you
  515. want to enter the debugger programatically you can now also pass a string to
  516. the debugger which will be printed on the bottom line of the screen when the
  517. debugger is entered.
  518.  
  519. The way this mechanism works is a fake tool call that the debugger now
  520. supports. Since this looks like a normal tool call it can be easily called
  521. by any high level language as well as by assembly language.  This toolcall
  522. called DebugStr takes a single parameter, a pointer to a pascal string. When
  523. the tool call is made the debugger is entered as if you had put a break
  524. into your code, but the string you passed is displayed on the screen and
  525. the program counter has been bumped passed the tool call jsl. This way you
  526. can simply resume execution with two simple keystrokes (with the init
  527. version hit 'R' <return>).
  528.  
  529. Calling this new feature might look something like this
  530.  
  531.         PushLong #DebugStr
  532.         ldx #$09FF
  533.         jsl >$E10000
  534.  
  535.     ...
  536.  
  537. DebugStr    str 'You are about to do blah.'
  538.  
  539.  
  540. from pascal the same would be achieved by doing this...
  541.  
  542.         DebugStr('You are about to do blah.');
  543.  
  544.  
  545. I would recommend that assembly language users use a macro to make the
  546. toolcall and call it _DebugStr.  MPW IIGS Pascal users could use the
  547. following to define the debugstr routine:
  548.  
  549.     Procedure DebugStr(theString:str255);
  550.         INLINE $09FFA2, $E1000022;
  551.  
  552.  
  553. This call will also work when being called via the glue vector.
  554. NOTE: Since this call is only available when the debugger is loaded you
  555. will ALWAYS want to be sure to remove ALL calls to the debugger before
  556. releasing your program (or even using it on machines that do not have a
  557. debugger installed).
  558.  
  559.  
  560. SetMileStone:
  561.  
  562. SetMileStone operates exactly the same way as debugstr except that the
  563. debugger is not actually entered. This will allow tracking of random
  564. crashes by allowing you to call the SetMileStone routine with milestones
  565. that have been met. Any time the debugger is entered via a BRK instruction
  566. or thru the keyboard, the last string passed via the SetMileStone call will
  567. be displayed. The toolcall number for SetMileStone is $0AFF, the  MPW IIGS
  568. Pascal interface might look like this:
  569.  
  570.  
  571.     Procedure SetMileStone (theString:str255);
  572.         INLINE $0AFFA2, $E1000022;
  573.  
  574.  
  575. DebugVersion, DebugStatus:
  576.  
  577. These calls are added so that an application can identify the version of the
  578. debugger that is loaded and thus know what calls can be made to the debug
  579. tool. Currently, these calls are identical and return the same result. The
  580. DebugStatus call returns non-zero for true (as opposed to $FFFF which most
  581. people might want...) other than that these calls act the same as any other
  582. toolbox status or version call, each call requires a word space on the stack
  583. for the result which is on the top of the stack when the call completes. If
  584. a debugger is loaded that does not support this feature you will get a
  585. standard tool locator error. For version 1.5b8 the version number returned
  586. is $158F .As you might expect, this number will change as the debugger
  587. version changes and it will always go up, never down.
  588.  
  589.  
  590.  
  591. Glue Snypher:
  592.  
  593. Glue snypher is a routine that can recognize high level language tool calls
  594. that are made with the standard glue entry, when a call to glue is detected
  595. while disassembling an instruction the call to glue will be replaced with
  596. *_TooName in a manner similar to how real tool calls now work. Glue snypher
  597. is also used by the memory protect feature, if a glue call is detected
  598. while the standard toolbox memory protect range is on, the glue call will
  599. be treated as if it were a JSL >$e10000.  All glue entries MUST be a JSL
  600. to one of 3 standard types of glue that are shown below:
  601.  
  602. ToolGlueType1   LDX #$ToolNum
  603.     JSL >$E10004
  604.     ...
  605.     RTL
  606.  
  607.  
  608. ToolGlueType2   LDX #$ToolNum
  609.     JML CommonCall
  610.     ...
  611. CommonCall  JSL >$E10004
  612.     ...
  613.     RTL
  614.  
  615.  
  616. ToolGlueType3   LDX #$ToolNum
  617.     JMP CommonCall
  618.  
  619. If any other types of glue calls are used, they will not be properly detected.
  620.  
  621. Glue Breaks:
  622.  
  623. In addition to glue snypher further support was added for high level
  624. languages by extending the tool break support to the glue vector ($E10004).
  625. Since error conditions are treated differently with glue (The second RTL
  626. ain't mine no more...) it seems unreasonable to also support error breaks
  627. via the glue vector.
  628.  
  629.  
  630.  
  631. OSBreaks:
  632.  
  633. OSBreaks work very much the same way that tool breaks work with three
  634. exceptions. First, instead of breaking on a tool call they will break on
  635. a call to the OS. Next, you can NOT specify an OS break by name, only by
  636. number. Lastly, they are not supported in trace mode, only in real time
  637. mode.  To use OSBreaks you simply type setOSBrk #xxxx where xxxx is the
  638. number of the OS routine that you want to break on. This number is matched
  639. exactly when an OS call is made, so if you do not know if the target call
  640. is class 0 or class 1 you must set the break for both calls. OSBreaks are
  641. supported via both vectors, inline and stackbased. The following is a
  642. list of commands that operate on OS breaks and what they do.
  643.  
  644. SetOSBrk - adds a number to the OS break list
  645. ClrOSBrk - Removes a given number from the OS break list
  646. ClrAllOSBrk - Removes all numbers from the OS break list
  647. OSBrkIn - enables real time scanning for OS breaks
  648. OSBrkOut - disables real time scanning of OS breaks
  649. ShowBrks - lists all tool and OS breaks currently set.
  650.  
  651.  
  652.  
  653. DA Debugging support:
  654.  
  655. In the past it has always been difficult to debug certain new desk
  656. accessories because they accept keystrokes, and keep the debugger from
  657. receiving them. I have added a patching mechanism to the system event
  658. call that is installed when the debugger is installed that fixes this
  659. problem. The way this feature now works is that if the caps lock key is
  660. down no keyboard events get passed to system event (and then to any open
  661. DA's) and the debugger will always get them. A side effect of this is that
  662. when the debugger screen is not active applications will get the same
  663. keystroke events if the CAPS LOCK key is down. As a gentle reminder of
  664. this feature, when installed, it will make your GS speaker click whenever
  665. a key is processed by getNextEvent.  The debugger used to click on every
  666. keystroke, regardless of the state of the CAPS LOCK key.  Dave complained
  667. enough that the debugger was changed to only click when keys are pressed
  668. if the CAPS LOCK key is down.
  669.  
  670.  
  671.  
  672. New Template types:
  673.  
  674. We have added support for a few more data types in templates, these are
  675. mainly for use with GS/OS strings, but can also be used for any word
  676. length string. they are:
  677.  
  678.     InputStr:   This type will read the next word of data and treat it as
  679.                 a length word for string data that follows. The entire
  680.                 contents of the string will be displayed.
  681.  
  682.     OutputStr:  Similar to InputStr except that the first word is a buffer
  683.                 length and the second word is the string length. After the
  684.                 string is displayed the debugger will skip to the end of
  685.                 the buffer to find the next byte of data to process.
  686.  
  687.  
  688. RealTime Conditional Breakpoints:
  689.  
  690. The debugger now supports conditional real time breakpoints. In the past
  691. when a breakpoint was entered in the breakpoint list and you used the IN
  692. feature to make them work real time, the trigger count that you entered
  693. was ignored. Now, If you the trigger count is supported the same way it is
  694. supported in trace mode, that is, if you insert a real time breakpoint
  695. with a count higher than 1 it will break on the Nth execution of the
  696. opcode at that location. NOTE: Currently the following opcodes are not
  697. supported as real time conditional breakpoints: JSL(mem), JSR(mem),
  698. JSR(mem,x), JMP(mem), JMP(mem,x), RTI.
  699.  
  700. In addition to supporting a count value for real time break points, the
  701. debugger now also allows a simple conditional statement to be used instead.
  702. The debugger allows only one conditional statement at a time, but as many
  703. of the breakpoints can use it as you want. To enable the conditional
  704. statement (henceforth called IF) simply type an "i" when entering a
  705. breakpoints trigger value instead of a hex digit. To set the current IF
  706.  
  707. use the command SetIF. the syntax of the SetIF command is as follows:
  708.  
  709.     SETIF {width} {Spec1}{Operator}{Spec2}
  710.  
  711. Legal {width} values
  712.      W  for word
  713.      B  for byte
  714.  
  715.  
  716. Legal {Operator} values
  717.     =   for is equal to
  718.     #   for is NOT equal to
  719.     <   for is less than
  720.     >   for is Greater than or equal to
  721.  
  722.  
  723. Legal {Spec1} and {Spec2} values are
  724.     A,X,Y,S,D,P,B   for the corresponding register
  725.     $BBXXXX     as the address of a value in memory
  726.     #$XXXX      as a hexidecimal constant ({SPEC2} only)
  727.  
  728.  
  729. Some examples of IFs
  730.  
  731.     SETIF W A<#$0101        (Break if the word in <A> is less than #$0101)
  732.  
  733.     SETIF B $021234=$034321 (Break if the bytes at $02/1234 and $03/4321
  734.                              are the same.)
  735.  
  736. NOTE: Currently only long addresses are supported.
  737.